// 生成首字母彩色 SVG 图标，并返回 data:image/svg+xml;charset=utf-8,URL 编码的 dataURL
// 说明：
// - size: 输出像素大小（正方形）
// - letter: 单个字符，将自动转为大写
// - bgColor: 背景色，若未提供则基于 host 进行稳定哈希生成

function hashString(str: string): number {
  let h = 2166136261 >>> 0; // FNV-1a 32-bit
  for (let i = 0; i < str.length; i++) {
    h ^= str.charCodeAt(i);
    h = Math.imul(h, 16777619);
  }
  return h >>> 0;
}

function colorFromHost(host: string): string {
  const palette = ['#f97316','#f43f5e','#ef4444','#eab308','#22c55e','#10b981','#06b6d4','#0ea5e9','#3b82f6','#6366f1','#a855f7','#ec4899','#94a3b8','#475569','#0f172a'];
  const h = hashString(host || 'default');
  return palette[h % palette.length];
}

export function generateLetterIcon(opts: { letter: string; size?: number; bgColor?: string; host?: string }): string {
  const size = Math.max(16, Math.min(256, Math.floor(opts.size || 96)));
  const L = (opts.letter || '站').slice(0, 1).toUpperCase();
  const bg = opts.bgColor || colorFromHost(opts.host || '');
  // 依据尺寸估算字体大小（与 Figma 视觉接近）
  const fontSize = Math.round(size * 0.58);
  const svg = `<?xml version="1.0" encoding="UTF-8"?>\n<svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}" viewBox="0 0 ${size} ${size}">\n  <defs>\n    <clipPath id="r">\n      <rect x="0" y="0" width="${size}" height="${size}" rx="${Math.round(size * 0.24)}" ry="${Math.round(size * 0.24)}" />\n    </clipPath>\n  </defs>\n  <g clip-path="url(#r)">\n    <rect width="${size}" height="${size}" fill="${bg}"/>\n    <text x="50%" y="50%" dy="0.36em" text-anchor="middle" fill="#fff" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,\"Apple Color Emoji\",\"Segoe UI Emoji\"" font-size="${fontSize}" font-weight="700">${L}</text>\n  </g>\n</svg>`;
  // dataURL（编码）
  const encoded = encodeURIComponent(svg).replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29');
  return `data:image/svg+xml;charset=utf-8,${encoded}`;
}
